import ArrayQueue from "./01_实现队列结构Queue";
// 击鼓传花
// 几个朋友一起玩游戏，围成一圈开始数数，数到某个数字的时候自动淘汰，
// 最后剩下的这个人会获得胜利，求最后剩下的是原来哪一个位置上的人

// 一个函数，接收一个数组，接收一个数字(当数到的是这个值的时候，淘汰)

// 假设数到的是3的时候出队
// 将这个数组遍历全部入队，然后从头开始出队，第一个是出队的是1，不是3，再次入队，第二个是2，出队，入队。第三个是3.出队，第四个重新数是1，入队出队

// 将最后出队的人返回，或者根据name找到对应的索引


function HotPotato(names:string[],num:number):number{
    //如果数组没有，直接 终止
    if(names.length === 0 ) return -1;
    const queue = new ArrayQueue<string>()
    //将数组中的所有数据全都入队
    for (let i = 0; i<names.length;i++){
        queue.enqueue(names[i])
    }
    //当队列中还有1个以上的数据时,一直循环
    while(queue.size() >1){
        //数数字,当数的数字小于传入的值时，让其入队再出队
        for (let i = 1; i < num; i++){
            const name = queue.dequeue()
            //这里防止出队的数据为undefined
            if(name) queue.enqueue(name)
        }
        //当最后数的数字值和传入的数字值相等时，将该数据出队
        queue.dequeue()
    }
    //后面的类型断言是为了防止取出的数据为undefined，最后出队人的姓名
    const leftName = queue.dequeue()!
    // console.log(leftName)
    //找到最后获胜的人的名字在数组中对应的下标
    const index = names.indexOf(leftName)
    return index
}

const leftIndex = HotPotato(['a','b','c','d','e'],3)
console.log(leftIndex)


